Ako som uviedol, riešením je použitie ThisWorkbook.Path. Zdráhal si sa sem dať prílohu, mám sto chutí tuná s vysvetľovaním končiť, páč mám za to, že doplnenie do kódu by si pri troche snahy zvládol a lenivosť nechcem podporovať, o dôvodoch si môžeš myslieť, čo chceš. Ale urobím dobrý skutok a dole nájdeš minimálnu modifikáciu tvojho kódu, ktorá pracuje s tým, čo z nejakého dôvodu nazývaš relatívnym odkazom. Bude fungovať za podmienky, že xls i txt sa budú nachádzať v rovnakom adresári, predpokladám, že aspoň uvedená podmienka platí, ako si tvrdil. Tú spústu balastu, x-krát úplne zbytočne select atd. som neriešil, doplnil som skutočne akurát novo zadeklarovanú premennú, naplnil ju hodnotou a na ňu odkázal. T.j. 3 riadky, pokiaľ by som to chcel urobiť prasácky, tak by to bol jeden:
Private Sub CommandButton1_Click()
' Vloží data z cesty viz. níže. Soubor musí být s pøíponou .txt, jinak nebude makro fungovat.
Dim myPath As String
myPath = ThisWorkbook.Path & "\"
Range("A1").Select
Columns("A:DD").Select
Selection.ClearContents
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & myPath & "kriteria.txt", Destination:=Range("$A$2"))
'.CommandType = 0
.Name = "kriteria"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 852
.TextFileStartRow = 1
.TextFileParseType = xlFixedWidth
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1)
.TextFileFixedColumnWidths = Array(8, 6, 12, 9, 9, 10, 10)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Columns("C:H").Select
Selection.ColumnWidth = 13.14
Columns("A:B").Select
Selection.ColumnWidth = 2.86
Selection.ColumnWidth = 6.71
Columns("A:L").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("C:V").Select
Selection.NumberFormat = "0.00"
Range("I1").Select
End Sub
edit: Teraz som si uvedomil, že to svoje makro si asi celé nahral záznamníkom, akurát ho potom dal pod tlačítko, to bola jediná úprava. Takže, pravdepodobne som príliš trdý, pokiaľ ťa viním z lenivosti, proste úprava makra je zatiaľ nad tvoje sily. V tom prípade beriem späť tú lenivosť. Zaujímalo by ma ale v takom prípade, ako by si si predstavoval pomoc bez toho, aby si zverejnil kód. Niečo mi tu nehrá
citovat