アプリ版:「スタンプのみでお礼する」機能のリリースについて

タイトルの通りです、ほかのパソコンで使用できないようにしたいのですが、マクロで可能でしょうか。
目的が達成できればほかの方法でも良いのですが、なるべく簡単で確実な方法をアドバイスしていただけますでしょうか。どうぞ宜しくお願いいたします。

A 回答 (9件)

こんばんは、


>目的が達成できればほかの方法でも良い
こんな方法は?
ThisWorkbookに
Private Sub Workbook_Open()
Dim flg As Boolean
Dim sh As Worksheet, ShCk As Worksheet
Dim WshNetworkObject As Object
Set WshNetworkObject = CreateObject("WScript.Network")
For Each sh In Worksheets
  If sh.Name = "setup_check" Then
    flg = True
    Exit For
  End If
Next
If flg = False Then
  Application.ScreenUpdating = False
  Worksheets.Add after:=Worksheets(Worksheets.Count)
  With ActiveSheet
    .Name = "setup_check"
    .Cells(1, 1) = WshNetworkObject.UserName
    .Cells(2, 1) = WshNetworkObject.ComputerName
    .Visible = xlVeryHidden
  End With
  Application.ScreenUpdating = True
End If
Set ShCk = Sheets("setup_check")
With WshNetworkObject
  If ShCk.Cells(1, 1) <> .UserName _
      Or ShCk.Cells(2, 1) <> .ComputerName Then
    MsgBox "起動できません"
    Application.Quit
  End If
End With
Set WshNetworkObject = Nothing
End Sub

このコードがWorkbook_Openに書かれている場合、
初めに開いたPC及びユーザーでないと開けなくなります。

初めて開いた時に新規シート setup_check を作成、
User名、PC名をWshNetworkObjectで取得し、A1A2セルに書き込み
シート非表示xlVeryHiddenシートタグからも表示できないようにします。

2度目開いた時にsetup_checkシートを検索、A1 A2 セルの値と
開いているPC名、User名と照合、合っていなければ、Application.Quit
私的には昔よく行った手法です。(今はしません。フルオープンなので)

非表示シートを表示する場合は、
Sub a()
Sheets("setup_check").Visible = True
End Sub
ただし、非表示に戻す時 .Visible = xlVeryHidden としないと
タグ右クリックで表示できてしまいます。
    • good
    • 0
この回答へのお礼

何度も補足をいただき、どうもありがとうございます
少々レベルが足りないので悪戦苦闘しております

お礼日時:2021/02/04 13:31

拡大した

「エクセルのマクロでMACアドレスを確認さ」の回答画像8
    • good
    • 0

いれる場所

「エクセルのマクロでMACアドレスを確認さ」の回答画像7
    • good
    • 0

5をbookの標準モジュールにいれ


下記をワークシートに入れ、00:00:00:00:00:00
を該当するMACアドレスにすればうごくかと
必ず マクロ有効のXLSMで保存
起動時マクロを有効にしない場合は、SHIFT押して起動
マクロの編集画面にいくにはALT+F11でいけます。


Private Sub Workbook_Open()
If Get_MacAddr() <> "00:00:00:00:00:00" Then
MsgBox "パソコンが違います"
Application.Quit
End If




End Sub
    • good
    • 0

落ちてたコードを改造してみました。


セルでget_macaddrでマックアドレスが参照できます。

Option Explicit
Public Function Get_MacAddr() As String
'WMIにて使用する各種オブジェクトを定義・生成する。
Dim oClassSet
Dim oClass
Dim oLocator
Dim oService
Dim sMesStr As String
Dim sMacaddr As String
'ローカルコンピュータに接続する。
Set oLocator = CreateObject("WbemScripting.SWbemLocator")
Set oService = oLocator.ConnectServer
'クエリー条件を WQL にて指定する。
Set oClassSet = oService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration")

'コレクションを解析する。
For Each oClass In oClassSet

If oClass.IPEnabled = True Then
sMacaddr = oClass.MACAddress
Exit For '複数のNICがあれば最初のものを所得
End If

Next

'使用した各種オブジェクトを後片付けする。
Set oClassSet = Nothing
Set oClass = Nothing
Set oService = Nothing
Set oLocator = Nothing
Get_MacAddr = sMacaddr

End Function
    • good
    • 0
この回答へのお礼

ありがとうございました
試してみます

お礼日時:2021/02/04 13:27

>パスワードだとほかのPCで使用できてしまいますので!



え?他人の話じゃなく自分の話なの?
自分で使えないようにしたいなら自制すればいいだけなんじゃないの?

そんな屁理屈てきなことを言い出したらMacアドレスなど偽装できるので他のPCでも使えちゃいますよ?
    • good
    • 0
この回答へのお礼

再度ありがとうございます
特定のPC以外では使用できないようにしたいのが目的でした
MACアドレスは変更できないものだと思っていましたので、それをキーにすれば可能かと思い込んでいました
そんなに簡単なものではないのですね
勉強になりました

お礼日時:2021/02/02 10:21

エクセルのマクロに限りませんが、利用している言語でサポートしていない機能を使う場合、その機能を持った外部のプログラムを呼びだして、その結果を受け取って判定するようにします。


外部のプログラムが使いやすい形で使える、マクロ等で使いやすくなっていればいいのですが、そうじゃあない場合は、その箇所でひと苦労することになります。

さしあたりWindowsのコマンドプロンプトで使える「ipconfig」で結果は得ることができるので、その出力を解析するって方法がありますね。

たとえば、C#でプログラムを作っているけど、ある特殊な処理はC++でプログラムを作る必要があって、その間のインターフェース作成に頭を悩ましたこともありましたが、それと同じ。
    • good
    • 0
この回答へのお礼

詳細にありがとうございます
私のレベルでは難しすぎるようです

お礼日時:2021/02/02 10:15

HDDのUUIDをとればいいかも


HDD交換、フォーマットをすればUUIDは変わります。
    • good
    • 0
この回答へのお礼

ありがとうございます
レベルが低いので難儀しそうです

お礼日時:2021/02/02 10:13

パスワードを掛ければ良いだけなのでは?

    • good
    • 0
この回答へのお礼

ありがとうございました。
パスワードだとほかのPCで使用できてしまいますので!

お礼日時:2021/02/02 10:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!