2016-08-02 9 views
6

私は3年以上にわたって動作しているコードを持っています。突然2016年7月28日に、それは動作を停止しました。ThisWorkbook.Sheets(1).Select(False)Not Working

それは非常にシンプルで、私はそれが簡単に解決(または多分マイクロソフトの更新はそれを破った)であると思います

ThisWorkbook.Sheets(1).Select 
ThisWorkbook.Sheets(2).Select (False) ' like holding ctrl 

これは、常にシート#1とシート#2を選択します。今では "(False)"が機能せず、Sheet#1のみが選択されているようです。私は5つの異なるコンピュータ(すべてExcel 2013)でこれを試しました。何が起こっているか教えてください。

ありがとうございます! -マイケブ

編集: これももう動作しません。コメントでジョーダンが言ったように、それは単に実行されません。

y = 9 
ThisWorkbook.Sheets(1).Select 

For y = 2 To x 

     ThisWorkbook.Sheets(y).Select (False) ' like holding ctrl 

Next y 

EDIT2: 決定的な答えがあるようには思えないので、誰かが回避策で私を助けることができる場合、私は尋ねます:

ThisWorkbook.Sheets(Array(1 to x)).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
    FolderName & "\" & QuoteFilename, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ 
    IgnorePrintAreas:=False, OpenAfterPublish:=False 

明らかにこれは動作しませんが、それは取得する必要があります私のポイント。

SOLUTION:ラルフへ

おかげで、私はいくつかの抜粋を取り、これを作成しました:

Private Sub Tester() 
x = 5 
ReDim SheetstoSelect(1 To x) As String 

For y = 1 To x 
    SheetstoSelect(y) = ThisWorkbook.Sheets(y).Name 
Next y 
ThisWorkbook.Sheets(SheetstoSelect).Select 

End Sub 

これは1-5から実際のシート#を選択し、その実際のシートの順で選択するようにシートを定義することができます。

最初の問題の根本はまだ分かりませんが、回避策も同様です。

+3

'False'の前後に角括弧を入れずに動作しますか?何か変わったはずですか?あなたはOfficeアップデート、OSアップデートを持っていましたが、もう2枚はありませんか? –

+0

エラーメッセージが表示されますか?テストするために、配列( "Sheet1"、 "Sheet2")を使用しようとしましたか? –

+0

@GaryEvansが述べたように、彼らはアップデートで何かを壊したと思います。 – Rory

答えて

3

次のコード行うselectマクロから呼び出されたワークブックのすべてのシート:あなたがあなたのオリジナルのポストにを求め

Option Explicit 

Public Sub SelectAllSheetsInThisFile() 

Dim x As Long 
Dim SheetstoSelect() As String 

ReDim SheetstoSelect(1 To ThisWorkbook.Worksheets.Count) 

For x = 1 To ThisWorkbook.Worksheets.Count 
    SheetstoSelect(x) = ThisWorkbook.Worksheets(x).Name 
Next x 
ThisWorkbook.Worksheets(SheetstoSelect).Select 

End Sub 

次サブますちょうどselect 2枚:

Option Explicit 

Public Sub SelectYourSheets() 

Dim SheetstoSelect(1 To 2) As String 
SheetstoSelect(1) = ThisWorkbook.Worksheets(1).Name 
SheetstoSelect(2) = ThisWorkbook.Worksheets(2).Name 
ThisWorkbook.Worksheets(SheetstoSelect).Select 

End Sub 

すべてを1行に収めたい場合は、splitを使用して、次のようにオンザフライでアレイを作成することもできます。

ThisWorkbook.Worksheets(Split("Sheet1/Sheet3", "/")).Select 

このコード行は、Sheet1Sheet3という名前の2枚のシートです。このコード行は、selectです。この文字はシートの名前で使用できないため、デリミタ/を選択しました。

私は@BruceWayneに同意します。可能であれば、selectの使用を避けるようにしてください。

+0

ありがとう!元の投稿の最後の編集を確認してください。 – mxc1090

+0

あなたの投稿を編集して、答えが既にここにあるときに答えを含む理由がわかりません。それは冗長で奇妙な(誰かがあなたのポストが不思議に読んだとき)ようです:答えを持つ誰かが質問を投稿するのですか?だから、私は(次回)最初の投稿を編集して投稿された回答を含めないことをお勧めします。このサイトの他のすべての投稿の少なくとも99.9%がこの形式に従います。 – Ralph

+0

それは、あなたが持っていたもののバリエーションであって正確なものではなかったので、私は推測します。私のコードは、「ワークシート」ではなく「シート」を使用しています。私は答えが埋もれるような他のサイトにも慣れていますので、OPはいつもメインの投稿に回答を入れています。私は未来のことを心に留めておきます...ありがとうラルフ! – mxc1090

1

私は8月の第1週まで完全に動作していたVBAを持っていました。その後、私のPDFには最初のページしかありませんでした。私はあなたと同様の方法を使用していました - 私は多くのワークシートを選択します。私は配列を使って作業をしました。私のコードはフォームの中にありましたが、私は参考のためにここに投稿します。

Private Sub CommandButton2_Click() 

Dim PrintArray() As Variant 

'I used a form to select with checkboxes which worksheets to print, so this code would go inside the form linked to a command button 

ReDim Preserve PrintArray(1 To 1) 
PrintArray(1) = "Sheet 1 Name" 
    j = 1 

If Sheet2.Value = True Then 'I used a checkbox to select which worksheets to print, but you could use any conditional statement here 
    j = j + 1 
    ReDim Preserve PrintArray(1 To j) 
    PrintArray(j) = "Sheet 2 Name" 
End If 

If Sheet3.Value = True Then 'I used a checkbox to select which worksheets to print, but you could use any conditional statement here 
    j = j + 1 
    ReDim Preserve PrintArray(1 To j) 
    PrintArray(j) = "Sheet 3 Name" 
End If 

'You could add as many pages and conditions as you need.... 

Unload Me 'because I was using a form 

Sheets(PrintArray).Select 


'Creates the PDF file name 
FileNameforSave = "Name of New File" & ".pdf" 

'Save file as a PDF 
ActiveSheet.ExportAsFixedFormat xlTypePDF, Filename:= _ 
     FileNameforSave, _ 
     Quality:=xlQualityStandard, IncludeDocProperties:= _ 
     True, IgnorePrintAreas:=False, OpenAfterPublish:=True 
End Sub 
0

私は今日同じ問題を抱えていました。 私の会社の更新スケジュールのためにおそらく延期されました。おそらく同じ更新プログラムです。 私はあなたのスレッドを発見し、その後、ちょうどあなたの回避策を実装する前に、私は1つはるかに簡単なのが見つかりました:

ThisWorkbook.Sheets(1).Select 
ThisWorkbook.Sheets(2).Select (False) ' like holding ctrl 
ThisWorkbook.Sheets(3).Select (False) 

はもう動作しませんが、

ThisWorkbook.Sheets(1).Select 
ThisWorkbook.Sheets(2).Select (False) ' like holding ctrl 
ThisWorkbook.Sheets(3).Select (False) 
ThisWorkbook.Sheets(2).Select (False) ' line 2 again; essential sacrifice for the vba-gods. 

はありません。

関連する問題