#excel #vba
#excel #vba
Вопрос:
Я хочу импортировать несколько файлов .blst на один рабочий лист и хочу разместить файлы .blst горизонтально на рабочем листе. Какой файл будет помещен отдельно примерно в 23 столбца, например, первое место файла в столбце A1 — W1, а второе X1- AT1 продолжить …n файл. Но мой код не может их открыть.
Приведенный ниже код представляет собой функцию преобразования в букву
Function ConvertToLetter(iCol As Integer) As String
Dim iAlpha As Integer
Dim iRemainder As Integer
iAlpha = Int(iCol / 27)
iRemainder = iCol - (iAlpha * 26)
If iAlpha > 0 Then
ConvertToLetter = Chr(iAlpha 64)
End If
If iRemainder > 0 Then
ConvertToLetter = ConvertToLetter amp; Chr(iRemainder 64)
End If
Debug.Print ConvertToLetter amp; 1
End Function
Приведенный ниже код является функцией мастера импорта
Function import_wizard(xFileName, xAddress) As String
With ActiveSheet.QueryTables.Add("TEXT;" amp; xFileName, Range(xAddress))
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 936
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = ";"
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Function
Приведенный ниже код является кнопкой для просмотра и импорта нескольких файлов .blst
Private Sub browseXML_Click()
Dim xFileName As Variant
Dim xAddress As String
Dim countFile As Integer
On Error GoTo ErrHandler
xFileName = Application.GetOpenFilename(FileFilter:="blst Files,*.*", Title:="Select file", MultiSelect:=True)
If IsArray(xFileName) Then
'Msg = vbNewLine
For i = LBound(xFileName) To UBound(xFileName)
Msg = Msg amp; xFileName(i) amp; vbCrLf
countFile = i 23
xAddress = ConvertToLetter(countFile) amp; "1"
SplitterMark.TextBox1.Value = Msg
Call import_wizard(xFileName, xAddress)
'Debug.Print "X = " amp; xAddress
Next i
Else
MsgBox "No files were selected."
GoTo ExitHandler
End If
ExitHandler:
ErrHandler:
End Sub
Когда я устаю комментировать, ' Call import_wizard(xFileName, xAddress)
код может выбрать несколько файлов и может отображаться в пользовательском интерфейсе, но устал удалять комментарии Call import_wizard(xFileName, xAddress)
, могу выбрать несколько файлов, но он показывает только последний файл из select, а не открывает их файл. Я не уверен, что это не подходит ActiveSheet.QueryTables.Add("TEXT;" amp; xFileName, Range(xAddress))
или нет. Кто-нибудь, пожалуйста, может предложить? Спасибо
Ответ №1:
Вам нужно «(i)», чтобы выбрать каждый отдельный файл в этой строке кода:
Call import_wizard(xFileName(i), ...
Вам не нужна ваша функция «ConvertToLetter» для преобразования номера столбца в адрес.
Я предлагаю рассчитать следующий столбец импорта следующим образом:
...
Dim NextColumn As Long
For i = LBound(xFileName) To UBound(xFileName)
NextColumn = (i - 1) * 23 1
Call import_wizard(xFileName(i), NextColumn)
Next i
...
Затем ваша процедура импорта должна начинаться следующим образом:
Function import_wizard(ByVal xFileName as String, NextColumn as Long) As String
With ActiveSheet.QueryTables.Add("TEXT;" amp; xFileName, ActiveSheet.Cells(1, NextColumn))
...
Комментарии:
1. Спасибо за ваш ответ. Я устал исправлять то, что вы предлагаете. но в
Call import_wizard(xFileName(i), NextColumn)
нем отображается какая-то ошибка оByRef argument type mismatch
том, как я это делаю?2. О, я понял. Большое вам спасибо