2017-08-16 9 views
0

テキストファイルを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 

これは非常に単純な問題のようですが、これらのエラーを回避する方法はわかりません。

答えて

1

2つの答え:

悪いニュース:あなたができないselectアクティブでないワークシートからセルまたは範囲。

良いニュース:値を割り当てるためにセルを選択する必要はありません。実際には、あなたはVBA内の何でもselectに避けるべきです、そうする理由はほとんどありません。代わりに、単に何かのようにしてください

with Worksheets(2) 
    .range("A2").value = "Build:" 
    ' or: .cells(1,1).value = "Build:" 
    ... 
end with 
+0

Ok。ありがとうFunThomas。これは正しい方向への良い一歩です。だから、範囲をフォーマットするために使用される以下のコードは、私が望む現在の方法で動作することができないと言っていますか? ワークシート(2).Range( "A3:D10003")選択 Selection.Horizo​​ntalAlignment = xlLeft –

+0

単にワークシート(2).Range( "A3:D10003")に変更してくださいHorizo​​ntalAlignment = xlLeft' – FunThomas

+0

うわー、それは直感的です。あなたが忍耐強くてうれしいです。明らかに、私はオブジェクトベースのプログラミングに新しいです。 –

関連する問題