Top > OOobbs2 > 140

OOobbs2/140 Edit

  • サマリ: UserNameを取得したいのですが。
  • 環境: Basic
  • 状態: 解決
  • 投稿者: ろく?
  • 投稿日: 2008-09-16 (火) 15:31:09

質問 Edit

ExcelVBAで以下のように記述しているものをOOoBasicでどのように記述するかがわかりません。 ご教授いただければ幸いです。

Private Sub CommandButton1_Click()
   [発信者] = Application.UserName
End Sub

ワークシート上にあるボタンを押すと[発信者]という名前を付けたセルにExcelのオプションで指定されているユーザー名が表示されるだけなのですが・・・

よろしくお願いいたします。

回答 Edit

  • どこからユーザー名を取得するか迷うところですが。

ButtonPush をボタンに割り当てます。

挿入 - 名前 - 指定でセル範囲に「発信者」として名前をつけておいたセルを取得、ユーザー名を入力します。セル範囲名に使用できる文字には制限がかなりあるようで、[] などは使用不可のようです。

ユーザー名を dll から取得するか USERNAME 環境変数から取得するかどちらがいいんでしょうかねぇ・・・。

Sub ButtonPush( oEvent )
 sUserName = GetCurrentUser()
 
 oDoc = ThisComponent
 oCellRange = oDoc.getSheets().getByIndex(0).getCellRangeByName("発信者")
 
 oCellRange.setString(sUserName)
End Sub

Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
   (ByRef lpbuffer As String, nSize As Long) As Long 
  
Function GetCurrentUser() As String
  Dim sUserName As String
  If GetPathSeparator() = chr(&H5C) Then
    sUserName = GetUserNameWin()
    'sUserName = Environ("USERNAME")
  Else
    'sUserName = Environ("LOGNAME")
    sUserName = Environ("USER")
  End If
  
  GetCurrentUser = sUserName
End Function

Function GetUserNameWin() As String
  Dim sBuffer As String
  Dim lSize As Long
  Dim sUser As String

  sBuffer = Space$(260)
  lSize = Len(sBuffer)
  Call GetUserName(sBuffer, lSize)
  If lSize > 0 Then
    sUser = Left$(sBuffer, lSize)
    lSize = InStr(sUser, Chr$(0))
    If lSize Then
      sUser = Left$(sUser, lSize - 1)
    End If
  Else
    sUser= ""
  End If
  GetUserNameWin = sUser
End Function
  • はにゃ? 2008-09-16 (火) 16:06:09
  • 素早い回答ありがとうございます!

2通りの方法とも試して(コメントアウトのところを切り替えて)みましたが何れもWindowsのログインユーザー名が出てきますね… できれば[ツール]-[オプション]-[ユーザーデータ]の姓名のテキストがほしいのですが…

P.S.掲示板の使い方をよく理解してません。コレでいけるのかな?

  • ろく 2008-09-17 (水) 08:54:31
  • あー、そっちじゃないかと思ったんですが・・。というわけで、コンフィグレーションの /org.openoffice.UserProfile/Data 以下から取得します。
  • givenname: 名
  • sn: 姓
  • initials: イニシャル

姓 + 名の形は適当にいじってやってください。間にスペース入れるとか…。

Type UserName
 FamilyName As String
 GivenName As String
End Type

Sub get_name_test
 oUserName = GetUserName()
 
 sUserName = oUserName.FamilyName & oUserName.GivenName
 msgbox sUserName
End Sub


Function GetUserName As Object
 Dim oCP As Object
 Dim oCUA As Object
 Dim aProps(0) As New com.sun.star.beans.PropertyValue
 Dim oElementNames As Object
 Dim oData As Object
 Dim oElementNames_2 As Object
 Dim sHierarchicalName As String

 oCP = CreateUnoService( _
   "com.sun.star.configuration.ConfigurationProvider" )
 aProps(0).Name = "nodepath"
 aProps(0).Value = "/org.openoffice.UserProfile/Data"
 oCUA = oCP.createInstanceWithArguments( _
   "com.sun.star.configuration.ConfigurationUpdateAccess", aProps )
 
 ' アルファベット順
 sParts = oCUA.getPropertyValues( Array("givenname", "sn") )
 
 Dim oUser As UserName
 oUser.FamilyName = sParts(1)
 oUser.GivenName = sParts(0)

 ' ここで姓名を連結してもいい気が
 GetUserName = oUser
End Function

GetUserName 関数は上記の Declare Function と重なっているため同じモジュールに書くとエラーになります。コメントアウトなどで対処してください。

  • はにゃ? 2008-09-17 (水) 10:33:59
  • ありがとうございます。コレでOOo移行計画の大いなる第1歩が見えてきました! -- ろく 2008-09-17 (水) 14:45:26

感想,コメント,メモ Edit



Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes