テキストファイルをExcelにインポートするマクロを設計しています。このプログラムは最初にすべてのデータをシート1にインポートするように設計されていましたが、フィードバックを得た後、すべてのデータを代わりにシート2に持って来るように言われました。このマクロは、コード行の先頭にActivesheet
のようなコマンドを使用すると問題なく動作しました。なぜなら、sheet1は常にアクティブなシートだったからです。 *両方のシートが両方ともデフォルト名を持つことに注意してください。範囲クラスの選択構文複数のシート間のエラー
私はに行ってとWorksheets("Sheet2").Range("A1")...
を入力して、代わりにシート2を考えるためにすべての私の範囲のFNSを変更しようとしましたが、これは「RangeクラスのSelectメソッド」
くれ
を与えていますエラー。このエラーは、最初のfnの後でQueryテーブルを使用してファイルをインポートするときに発生します。
Option Explicit Sub importtxt() Dim txtloc As Variant Dim build As String Dim bit As String Dim rng As Range 'Asks user for the build number that has been imported, then assigns that string to cell B1 build = InputBox("What build of SoundCheck is this?") 'Prompt Bitness bit = InputBox("Please provide the bitness of this SoundCheck") 'Asks user for location of the Time_Memlog.txt file to be imported txtloc = Application.GetOpenFilename _ (FileFilter:="Text Filer (*.txt),*.txt", _ title:="Open File(s)", MultiSelect:=False) 'Imports .txt file designated in the txtloc string With Sheets("Sheet2").QueryTables.Add(Connection:="TEXT;" & txtloc, destination:=Worksheets(2).Range("$A$1")) .Name = "Sample" .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) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With 'Clears the garbage in cell A1 Worksheets("Sheet2").Range("$A$1").Select ActiveCell.Clear 'Places the string build in cell A1 Worksheets(2).Range("A1").Select ActiveCell.Value = "Build:" Worksheets(2).Range("B1").Select ActiveCell.Value = build Worksheets(2).Range("C1").Select ActiveCell.Value = bit 'Selects all columns of the Time_Memlog and adjusts the column width to fit heading Worksheets(2).Range("A1:S10003").Select Selection.Columns.AutoFit 'Makes column headers bold text Sheets("Sheet2").Range("A2:D2").Font.Bold = True 'Create borders around cell range A2:D2 Set rng = Worksheets(2).Range("A2:D2") With rng.Borders .LineStyle = xlContinuous .Weight = xlThin End With 'Give background color to cells A2:D2 With rng.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent6 .TintAndShade = 0.599993896298105 .PatternTintAndShade = 0 End With 'Aligns all cells below Column headers to the left Worksheets(2).Range("A3:D10003").Select Selection.HorizontalAlignment = xlLeft 'Give background color to cells A1:C1 Worksheets(2).Range("A1:C1").Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorDark1 .TintAndShade = -0.149998474074526 .PatternTintAndShade = 0 End With Selection.HorizontalAlignment = xlLeft Worksheets(2).Range("D1").Select Selection.Clear End Sub
これは非常に単純な問題のようですが、これらのエラーを回避する方法はわかりません。
Ok。ありがとうFunThomas。これは正しい方向への良い一歩です。だから、範囲をフォーマットするために使用される以下のコードは、私が望む現在の方法で動作することができないと言っていますか? ワークシート(2).Range( "A3:D10003")選択 Selection.HorizontalAlignment = xlLeft –
単にワークシート(2).Range( "A3:D10003")に変更してくださいHorizontalAlignment = xlLeft' – FunThomas
うわー、それは直感的です。あなたが忍耐強くてうれしいです。明らかに、私はオブジェクトベースのプログラミングに新しいです。 –