Mam skoroszyt Excel z programem Excel, który zawiera kilka nazwanych arkuszy. Jeden z arkuszy roboczych nosi nazwę "panel", a drugi arkusz roboczy nosi nazwę "dane". Arkusz o nazwie "panel" ma przycisk, do którego przypisane jest makro. Chciałbym wybrać przycisk na arkuszu roboczym o nazwie "panel" i wyświetlić okno przeglądania pliku. Gdy użytkownik wybierze plik csv na swoim dysku twardym, chciałbym, aby zawartość pliku csv została zaimportowana do arkusza roboczego o nazwie "data", zaczynającego się w komórce A1.makro, aby zaimportować plik CSV do arkusza nieaktywnego programu Excel
PROBLEM 1: Przycisk vba przypisany do przycisku powoduje umieszczenie zawartości pliku csv w tym samym arkuszu roboczym, co przycisk (arkusz "panel"). Chciałbym, aby zawartość pliku csv została umieszczona na arkuszu "danych".
PROBLEM 2: Istnieje również ciąg kodu odnoszącego się do mojego dysku twardego i pliku o nazwie "capture.csv". Tak więc, gdy plik Excela z włączoną obsługą makr znajduje się na innym komputerze, plik ulega awarii. Jakikolwiek sposób na usunięcie ciągu ścieżek, aby dowolny komputer mógł go użyć?
Każda pomoc w rozwiązaniu tego problemu byłaby bardzo doceniana. Makro przypisane do przycisku:
Sub load_csv()
Dim fStr As String
With Application.FileDialog(msoFileDialogFilePicker)
.Show
If .SelectedItems.Count = 0 Then
MsgBox "Cancel Selected"
End
End If
'fStr is the file path and name of the file you selected.
fStr = .SelectedItems(1)
End With
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Users\laptop\Desktop\CAPTURE.csv", Destination:=Range("$A$1"))
.Name = "CAPTURE"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
MsgBox fStr
End With
End Sub
Dokładnie to, co miałem zamiar powiedzieć. To powinno zadziałać – Rick
Dziękuję za poświęcenie czasu, aby mi pomóc. Przypisałem przyciskowi kod, który napisałeś. Po załadowaniu pliku csv zostanie wyświetlone okno komunikatu: "Błąd wykonania" -2147024809 (80070057) Zakres docelowy nie znajduje się w tym samym arkuszu roboczym, na którym jest tworzona tabela zapytań. " – George
Zmień "Destination: = Range (" $ A $ 1 "))' na 'Miejsce docelowe: = ThisWorkbook.Sheets (" Data ") Zakres (" $ A $ 1 "))' –