2016-11-17 5 views
0

私は実際にはVBAには新しくなっていますが、私はオフィス業務を効率化するためにコーディングを行っています。これはあなたの大部分のアマチュアレベルの質問になると私は理解していますが、私はしばらくの間、Googleに試してみましたが、満足のいく回答は見つかりませんでした。シートを変数からVBAでアクティブにするにはどうしたらいいですか? (特にセル)

私は入力したパラメータに基づいて書き出しを行います。最終的に正しいシートを参照する必要があります - >選択したセルをコピーする - >コピーされたセルを添付ファイルとともにペーストする電子メールを生成する

私はコードの変数として "正しいシート"を参照することはできません。私のためにいくつかの光を当ててください。ありがとうございました。

ここはほとんどのコードですが、残りの部分は無関係で、あまりにも私が推測するように貼り付けるのは面倒です。

Sub GenerateEmail() 

    Dim olApp As Object 
    Dim olMailItm As Object 
    Dim iCounter As Integer 
    Dim Dest As Variant 
    Dim SDest As String 
    Dim StrAtt1 As String 
    Dim rng As Range 



    Set rng = Nothing 
    On Error Resume Next 
    Set rng = Sheets("test").Range("A1:Q500").SpecialCells(xlCellTypeVisible) 
    On Error GoTo 0 

    If rng Is Nothing Then 
     MsgBox "The selection is not a range or the sheet is protected" & _ 
       vbNewLine & "please correct and try again.", vbOKOnly 
     Exit Sub 
    End If 

    With Application 
     .EnableEvents = False 
     .ScreenUpdating = False 
    End With 

    Set olApp = CreateObject("Outlook.Application") 
    Set olMailItm = olApp.CreateItem(0) 

    On Error Resume Next 
    With olMailItm 
     SDest = "" 
     StrAtt1 = ThisWorkbook.Path & "\PDF\" & Sheets("Email_Generator").Range("B16") 

     .To = Worksheets("Email_Generator").Range("B14") 
     .CC = "Myself" 
     .BCC = "" 
     .Subject = Worksheets("Email_Generator").Range("B18") 
     .HTMLBody = RangetoHTML(rng) 
     .attachments.Add StrAtt1 
     .Display 
    End With 

    Set olMailItm = Nothing 
    Set olApp = Nothing 
End Sub 

具体的に、私はこのコードはに参照するように、私はExcelで入力された偶然に基づいて可変されたテスト 『"シートにセルとして、このコード「シート(」試験)』を希望しますそれが変数になることができないだけという正しいワークシート

Set rng = Sheets("test").Range("A1:Q500").SpecialCells(xlCellTypeVisible) 

しかし、私は名前のシートなどのシート(「Email1」)などのシートを識別するとき、それは完璧に動作し、。

私はこの記事ではありません願っています私はできるだけ具体的にしようとしていたので、読んでも長すぎます。これを読んで助けようとします。ほんとうにありがとう。

答えて

0

ユーザーが選択したワークシート名をInputBoxから戻す関数です。ユーザーが無効な数値を取り消したり入力したりすると、関数は長さゼロの文字列を返します。 enter image description here

Sub TestFunction() 
    Dim SheetName As String 
    Dim rng As Range 
    SheetName = getSheetNameFromInputBox 
    If Len(SheetName) = 0 Then 
     MsgBox Prompt:="Try Again", Title:="Invalid Sheet" 
     Exit Sub 
    End If 
    Set rng = Sheets(SheetName).Range("A1:Q500").SpecialCells(xlCellTypeVisible) 

    MsgBox rng.Address(External:=True) 
End Sub 

Function getSheetNameFromInputBox() As String 
    Dim ws As Worksheet 
    Dim Prompt As String 
    Dim result 

    For Each ws In ThisWorkbook.Worksheets 
     If Not ws.Name = "Sheet3" Then 
      Prompt = Prompt & ws.Index & ") " & ws.Name & vbCrLf 
     End If 
    Next 

    result = InputBox(Prompt:=Prompt, Title:="Enter the Worksheet number", Default:=1) 
    On Error Resume Next 
    If IsNumeric(result) Then getSheetNameFromInputBox = Worksheets(CInt(result)).Name 
    On Error GoTo 0 
End Function 
+0

こんにちはトーマスは、実際には、参照されたシートは、各ペアは独自のシート自体を持っています異なる通貨ペア、に基づいて行われます、それはセルにそれを参照することが可能で、お返事ありがとうございましたユーザーが長時間のシート名を入力する必要がないように入力するボックスの代わりに、私は10枚以上あると思われます。これらのシートの名前を1 2 3 4 5などとすることはできません。 その特定のセルは、実際に、ジェネレータワークシートに入力したパラメータから自動的に生成されます。 返信いただきありがとうございます。 – keiar

+0

@keiarこの関数は、ワークシートのインデックスを参照として使用するだけでなく、ワークシート名もリストします。コードモジュールに関数を貼り付け、F5キーを押して、意味を確認します。あるいは、参照できる検証リスト付きのセルを使用することもできます。 –

+0

Thomas:ありがとう、コードを貼り付けようとしましたが、実行しようとするとエラーが発生します。間違った場所に貼り付けたとします。どこに追加するべきか教えてください。 「Sheetname」も薄暗くする必要がありますか?私は非常に明白な何かを逃したと確信しています。 – keiar

関連する問題