Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2013)
ACCESSからエクセルの最終行を取得するには
投稿日時: 19/07/07 17:24:43
投稿者: ひろと

お世話になります。
  
アクセスから現在開いているエクセルの最終行を取得し、条件付き書式を設定したいと考えております。
  
Dim MaxRow As Integer
Dim WsObj As Object
  
〜省略〜
Set WsObj = WBObj.Worksheets(1)
' WsObjは取得できています。
  
MaxRow = WsObj.Cells(xlSheet.Rows.Count, 1).End(xlUp).Row
              
WsObj.Range("A3:F" & MaxRow).FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="55"
  
MaxRowはエクセルでは動作するのですが、アクセスからでは作動しません。
(オブジェクトをWsObjと指定しているのですが、実行時エラー424 オブジェクトが必要です。となってしまいます)。
 
この処理はACCESS側からはできないでしょうか。

回答
投稿日時: 19/07/07 21:18:56
投稿者: よろずや

xlで始まる定数は、エクセル専用なのでアクセスでは使えません。
 
対処法その1:
エクセルでxl定数の値を調べ、その数値を使用する。
 
調べ方:イミディエイト画面で
?xl定数Enterとやると、その値が表示されます。
?xlup
-4162
?xlcellvalue
 1
?xlgreater
 5
 
MaxRow = WsObj.Cells(xlSheet.Rows.Count, 1).End(-4162).Row
               
WsObj.Range("A3:F" & MaxRow).FormatConditions.Add Type:=1, Operator:=5, Formula1:="55"
 
対処法その2:
調べた値をアクセス側で定義してやる。
Const xlUp = -4162
Const xlCellValue = 1
Const xlGreater = 5

回答
投稿日時: 19/07/08 07:33:41
投稿者: Suzu

対処法その3:
 Access にて、Excelの参照設定を行う。
 
 VBE画面、 「ツール」-「参照設定」 にて
   Microsoft Excel x.x Object Library にチェックを入れる。

回答
投稿日時: 19/07/08 09:49:14
投稿者: よろずや

>対処法その3:
> Access にて、Excelの参照設定を行う。
 
うん、これが一番いい。
 
但し、複数のバージョンのPCに配布して使うケースでは、
参照設定がトラブルの元になるので使えないんですよね。
で、私は滅多に使わないんで失念しておりました。(ーー;)

回答
投稿日時: 19/07/08 10:20:16
投稿者: sk

引用:
Set WsObj = WBObj.Worksheets(1)

引用:
MaxRow = WsObj.Cells(xlSheet.Rows.Count, 1).End(xlUp).Row

MaxRow = WsObj.Cells(WsObj.Rows.Count, 1).End(xlUp).Row
 
--------------------------------------------------------------
 
変数 WsObj が参照しているワークシート自身の 1 列目の最終行の番号を
得ようとなさっているなら、上記のように記述して下さい。

投稿日時: 19/07/08 23:18:49
投稿者: ひろと

皆さま
 
お世話になります。
アドバイスありがとうございます。
 
「参照設定」ですか。目からウロコです。
今回は1台のPCだけで処理を行うので、参照設定でいきたいと思います。
 
あと、フォントカラーを変えたいのですが、上手く動作しません。
 
MaxRow = WsObj.Cells(WsObj.Rows.Count, 1).End(xlUp).Row
 
WsObj.Range("A3:F" & MaxRow).FormatConditions.Add Type:=1, Operator:=5, Formula1:="55"
ここにフォント変更処理を追加すればよいのでしょうか。
 
よろしくお願いいたします。

回答
投稿日時: 19/07/09 09:23:39
投稿者: sk

引用:
フォントカラーを変えたい

引用:
WsObj.Range("A3:F" & MaxRow).FormatConditions.Add Type:=1, Operator:=5, Formula1:="55"

Dim FcObj As Object
 
Set FcObj = WsObj.Range("A3:F" & MaxRow).FormatConditions.Add(Type:=xlCellValue, Operator:=xlGreater, Formula1:="55")
 
FcObj.Font.Color = RGB(255, 0, 0)
 
Set FcObj = Nothing
 
---------------------------------------------------------------------
 
以上のように、条件付き書式におけるフォントの色を設定なさりたい、
ということでしょうか。
 
それとも、単純にセルのフォントの色を設定したいだけでしょうか。

投稿日時: 19/07/12 15:36:35
投稿者: ひろと

sk さんの引用:
引用:
フォントカラーを変えたい

引用:
WsObj.Range("A3:F" & MaxRow).FormatConditions.Add Type:=1, Operator:=5, Formula1:="55"

Dim FcObj As Object
 
Set FcObj = WsObj.Range("A3:F" & MaxRow).FormatConditions.Add(Type:=xlCellValue, Operator:=xlGreater, Formula1:="55")
 
FcObj.Font.Color = RGB(255, 0, 0)
 
Set FcObj = Nothing
 
---------------------------------------------------------------------
 
以上のように、条件付き書式におけるフォントの色を設定なさりたい、
ということでしょうか。
 
それとも、単純にセルのフォントの色を設定したいだけでしょうか。

 
 
sk様
 
お世話になります。
フォントの色だけ変更したいと考えております。
 

回答
投稿日時: 19/07/12 16:04:31
投稿者: sk

引用:
フォントの色だけ変更したいと考えております。

WsObj.Range("A3:F" & MaxRow).Font.Color = RGB(255, 0, 0)
 
-----------------------------------------------------------
 
以上のように、任意の Range オブジェクトの Font プロパティから
Font オブジェクトを参照し、その Color プロパティの値を
設定なさればよろしいでしょう。

投稿日時: 19/07/15 14:13:20
投稿者: ひろと

皆さま
 
ありがとうございます。
 
無事、解決いたしました。