• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:OpenOffice,Basic,Mid()関数にて「無効なプロシージ)

OpenOffice,Basic,Mid()関数にて「無効なプロシージャの呼び出し」のエラー?

このQ&Aのポイント
  • OpenOffice Basicの初心者です.
  • 「指定ユーザ数の、指定文字数のランダム文字列(a-z,A-Z,0-9)を生成するプログラム」を作成したのですが、以下のスクリプトを実行すると、「アクションは支援されません。無効なプロシージャーの呼び出し。」というエラーが出力されます。色々と自分で原因究明してみましたが、原因が分かりません。
  • どなたか、ご教授頂けませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんにちは。 余分な回答の削除依頼は出して頂いたものとして回答します。 確かに、&でも+でも良いようです。失礼しました。 本当の原因はrnd()関数についての誤認識だと思います。 つまり >rand = int(maxRand * Rnd()) ' 乱数の生成 がError行です。 詳しく説明しますとRnd()関数とは 「0~1の間の乱数を生成する」 ものです。 また質問者さんは大文字、小文字、数字が混ざった文字列を作りたいために smallString = "abcdefghijklmnopqrstuvwxyz" largeString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" numberString = "0123456789" の合計文字数+1の26*2+10+1=63を用いていると思います。 少し、寄り道をしましたが要は rand=0 の場合がある事を忘れているのではありませんか? rand=0の場合 pw = pw + Mid(rootString, 0, 1) となり、 「0文字目から1文字取得」 とう事になります。 従い *********[ 修正コード ]********** rand = int(maxRand * Rnd()) ' 乱数の生成 if rand <> 0 then pw = pw + Mid(rootString, rand, 1) else j = j-1 end if *********************************** とすれば解決します。 ps. くれぐれも3~8の回答削除依頼をお願いします。

double4cm
質問者

お礼

おっしゃるとおりです. rnd()関数のこと,ちゃんと理解できていませんでした. 凡ミスでした. お恥ずかしいです. また,教えて頂いた改修法もあるかと思いますが, 単純に +1 しても解決できました. <改修箇所> maxRand = 62 ' 63未満の乱数生成する  for j = 1 to n       rand = int(maxRand * Rnd()) + 1 ' 乱数の生成       pw = pw + Mid(rootString, rand, 1)    next ご回答,ありがとうございました.

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

こんばんわ。 正解は以下です。 ******** [ code ] ******** Sub Main dim doc as object dim sheet as object dim cell as object dim i, j as integer ' for文制御用 dim m, n as integer ' m:何人分か, n:何文字分か dim rand, maxRand as integer dim pw as string '文字列格納用変数 ' 初期化 rand = 0 maxRand = 63 ' 63未満の乱数生成する m= 20 ' 何人分の文字列か n = 15 ' 何文字分の文字列か doc = thiscomponent sheet = doc.sheets (0) smallString = "abcdefghijklmnopqrstuvwxyz" largeString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" numberString = "0123456789" rootString = smallString & largeString & numberString '<= 文字列の結合は「&」です。JavaScriptでは「+」ですが・・・・。 cell = sheet.getcellbyposition(0,0) cell.string = "生成した文字列" for i = 0 to m pw = "" for j=1 to n rand = int(maxRand * Rnd()) ' 乱数の生成 pw = pw + Mid(rootString, rand, 1) print pw next cell = sheet.getCellByPosition(0,i) cell.string = pw next End Sub ****************************** 単純な凡ミスだと思いますが原因は上述の通り「&」と「+」の間違です。 VBAでも多分文字列の結合は「&」の筈と思いますが。 老婆心ながらOpenOffice.org Basicを学習されるならば一度以下のサイトを参照される事をお薦めします。 OpenOffice.orgのMaro全般が非常に親切・丁寧・的確に記されています。 「OpenOffice.org3」(翔泳社)という参考書でも紹介されているサイとです。 <<<<「はにゃ?」さんの個人サイト >>>> URL : http://hermione.s41.xrea.com/pukiwiki/index.php?FrontPage また、蛇足とは思いますが上記サイトのレベルが高いと感じられたら以下のサイトの「4.Macroの杜」を参照される事をお薦めします。  Free Softwareでいこう!! 「 OpenOffice.orgを使おう編 」 URL : http://openoffice3.web.fc2.com/

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

こんばんわ。 正解は以下です。 ******** [ code ] ******** Sub Main dim doc as object dim sheet as object dim cell as object dim i, j as integer ' for文制御用 dim m, n as integer ' m:何人分か, n:何文字分か dim rand, maxRand as integer dim pw as string '文字列格納用変数 ' 初期化 rand = 0 maxRand = 63 ' 63未満の乱数生成する m= 20 ' 何人分の文字列か n = 15 ' 何文字分の文字列か doc = thiscomponent sheet = doc.sheets (0) smallString = "abcdefghijklmnopqrstuvwxyz" largeString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" numberString = "0123456789" rootString = smallString & largeString & numberString '<= 文字列の結合は「&」です。JavaScriptでは「+」ですが・・・・。 cell = sheet.getcellbyposition(0,0) cell.string = "生成した文字列" for i = 0 to m pw = "" for j=1 to n rand = int(maxRand * Rnd()) ' 乱数の生成 pw = pw + Mid(rootString, rand, 1) print pw next cell = sheet.getCellByPosition(0,i) cell.string = pw next End Sub ****************************** 単純な凡ミスだと思いますが原因は上述の通り「&」と「+」の間違です。 VBAでも多分文字列の結合は「&」の筈と思いますが。

double4cm
質問者

お礼

ご回答ありがとうございます. ですが,「+」を「&」にしても結果は同じでした. 因みに, 以下サイトにて 文字列結合に「+」が使われているように見えるのですが, 「+」でも文字列結合できるのではないのでしょうか? http://wiki.services.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Strings_(Runtime_Library)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Mid関数(2)

    VB6.0でタイピングソフトを作成しています。KeyPressの入力判定で、入力された文字とLabel1に表示されている文字が一緒なら、その文字を消すという処理なんですが、 Private Sub Form_KeyPress(KeyAscii As Integer) Label1.Caption = "taipingu" If Mid(Label1.Caption, z, 1) = Chr(KeyAscii) Then Dim ss As String ss = Label1.Caption Mid(ss, z, 1) = " " Label1.Caption = ss z = z + 1 End if というやり方を教えていただいてやってみたのですが、 「If Mid(Label1.Caption, z, 1) = Chr(KeyAscii) Then」の部分で 「プロシージャの呼び出し、または引数が不正です」 というエラーが出てしまいます。しかも、このエラーが出ずに実行がうまくいくときもあります。 何故このエラーが出るのか、分かる方お願いします。

  • mid関数とmidステートメントの違いを教えてくだ

    Sub test1() MsgBox Mid("abc", 2) End Sub は、mid関数ですか?midステートメントですか? ヘルプを見ると、 --------------------------------------------------------- Mid ステートメントの使用例 次の例は、Mid ステートメントを使って、 文字列変数の中にある指定した文字数分の文字を他の文字列に置き換えます。 Dim MyString, FirstWord, LastWord, MidWords MyString = "Mid Function Demo" ' 文字列を定義します。 FirstWord = Mid(MyString, 1, 3) ' "Mid" を返します。 LastWord = Mid(MyString, 14, 4) ' "Demo" を返します。 MidWords = Mid(MyString, 5) ' "Function Demo" を返します。 --------------------------------------------------------- も --------------------------------------------------------- Mid 関数の使用例 次の例は、Mid 関数を使って、 文字列の中から指定した文字数分の文字を返します。 Dim MyString, FirstWord, LastWord, MidWords MyString = "Mid Function Demo" ' 文字列を定義します。 FirstWord = Mid(MyString, 1, 3) ' "Mid" を返します。 LastWord = Mid(MyString, 14, 4) ' "Demo" を返します。 MidWords = Mid(MyString, 5) ' "Function Demo" を返します。 --------------------------------------------------------- も同じです。 mid関数とmidステートメントの違いを教えてください。 ご回答よろしくお願いします。

  • OpenOffice.org Basicについて

     OOo.rcg Basicでsheet1のセルA2に入力されている文字列を指定されたバイト(桁)数にしたいんですが(今回は5バイトに指定し、桁数が足りない時はスペースで埋めます。)、メッセージボックスでは欲しい文字列が返ってくるのに、最後のセルへの代入ができません。  この説明文では理解できないかもしれませんが、おかしい所が分かる方教えていただけませんでしょうか? Function tkorigin(strVal As String, siteiketa As Integer) As String Dim moto As string Dim keta As long Dim i keta = len(strVal) moto = strVal if keta <> siteiketa then if keta < siteiketa then for i = 1 to siteiketa - keta moto = moto & " " next else moto = left(strval,siteiketa) end if end if ' msgbox "[" & moto & "]" tkorigin = moto End Function '--------------------------------------------------------------- Sub tameshi Dim strin As String Dim strout As String strin = Thiscomponent.Sheets(0).getCellByPosition(0,1).String strout = tkorigin(strin, 5) strin = strout ' msgbox "[" & strin & "]" End Sub

  • エクセルVBAで検索結果セル位置抽出時、実行時エラーが出ます。

    エクセルVBAで  ・シート"log"のA列にある文字列(A1="AB<CD>EF")を2つにわけて、それぞれシート"edit"のセルに保存(A1="<CD>")(B1="EF")し  ・さらにA1セルをシート"NameList"にあるリストを元に置換する という作業をさせるマクロを組んでいるのですが、 途中で「アプリケーション定義またはオブジェクト定義のエラーです」が出て困ってます。 組んだマクロは下記の通りです。 Option Explicit Option Base 1 Sub Edit() Dim i As Integer Dim log_lastrow As Integer Dim list_lastrow As Integer Dim all As String Dim main As String Dim hn As String Dim chr() As Variant Dim j As Integer Dim k As Integer Dim chrname As String Dim cell As Range Dim line As Integer log_lastrow = 100 list_lastrow = 100 ReDim chr(list_lastrow, 4) For j = 1 To list_lastrow For k = 1 To 2 chr(j, k) = Sheets("NameList").Cells(j , k).Value Next Next For i = 1 To log_lastrow all = Sheets("log").Cells(i, 1).Value hn = Mid(all, InStr(all, "<"), (InStr(all, ">") - 2)) main = Right(all, Len(all) - InStr(all, ">")) Set cell = Sheets("NameList").Columns("A:A").Find(what:=hn, lookat:=xlWhole, MatchCase:=True, matchbyte:=True) line = Sheets("NameList").Range(cell).Row  chrname = chr(line, 2) Sheets("edit").Cells(i, 1).Value = chrname Sheets("edit").Cells(i, 2).Value = main Set cell = Nothing Next End Sub 下から7行目の line = Sheets("NameList").Range(cell).Row 1行上で検索されたセル位置情報の行番号をlineに入れようと思ったのですが、ここでエラーが出ます。何が悪いのかよろしくご教授願います。

  • VB.NETでExcelの数式バーの処理をさせたい

    Excelのセルにいろいろな数式が入っていて、 この数式を書き出したテキストファイルを読み込ませて、 VB.NETで処理をしたいのですが、 VB.NETで、Excelの文字列関数を含んだ式を処理するには どのように記述すればよいでしょうか。 単なる計算式であれば  Dim xlApp As New Excel.Application  Dim str1 As String  Dim x As Integer  a = "3600 / 60 + 5000"  x = xlApp.Evaluate(a) でできるのですが文字列だとうまくいきません。 例えば、ExcelのシートのA1セルを選択して 数式バーに =MID("ABCDE",2,3) と入力すると その結果のBCDがA1セルに得られますが VB.NETで、 =MID("ABCDE",2,3) から BCD を得るにはどのようにすればよいでしょうか。 なお、=MID("ABCDE",2,3) の式は一例であって、 以下のように、この式をVB.NETで記述する 仕方を知りたいのではありません。  Dim str1, str2 As String  str1 = "ABCDE"  str2 = str1.Substring(2, 3) よろしくお願いします。 (VisualStudio2010 , Excel2003 , WindowsXP SP3)

  • EXCEL VBA VLOOKUP 範囲を変数で

    Excel VBA で VLookup()の第2引数の範囲を行と列の数値の変数で指定したいのすが どのように記述すればよいでしょうか。 以下の式がエラーにならないように具体的に直していただけないでしょうか。 よろしくお願いします。 ----------------------------------- Dim d1 As String Dim d2 As String Dim r1 As Integer Dim r2 As Integer Dim c1 As Integer Dim c2 As Integer Dim c3 As Integer d1 = "愛知" r1 = 2 r2 = 782 c1 = 3 c2 = 5 c3 = 4 d2 = VLookup(d1, Worksheets("Sheet1").Range(Cells(r1, c1), Cells(r2, c2)), c3, False)

  • 日付からの曜日取得

    VB6を使っています。 取得した年月の一日の曜日を取得したいのですが うまくできません。formatもなぜかエラー出るんです・・・ どなたか教えてください Dim dtCurrent As Date Dim y As Integer Dim m As Integer Dim j as string Dim nWeek As Integer j=DateTime.Date() y = Mid(j, 1, 4)'年 m = Mid(j, 6, 2)'月 dtCurrent = Format(y&m&01, yyyy / mm / dd) Week = Weekday(dtCurrent) - 1 '曜日取得

  • 特定の文字に対してポップアップ表示

    エクセルvbaでセルに特定の文字を含む文字が入力された時に、ポップアップを表示するようにしたいのですが、特定の文字とメッセージ内容は"設定用シート"内のA列に特定の文字、B列にメッセージ内容をセット。 下記のコードでは動作致しません。 どのように修正すれば宜しいでしょうか? Worksheet_Change(ByVal Target As Range) Dim searchRange As Range Dim cell As Range Dim searchText As String Dim message As String ' 設定用シートを参照 Set searchRange = Sheets("設定用シート").Range("A:B") ' 変更されたセルの中で特定の文字を検索 For Each cell In Intersect(Target, Me.UsedRange) searchText = cell.Value If Not IsEmpty(searchText) Then ' 設定用シートで特定の文字を検索 On Error Resume Next ' セルが見つからなかった場合のエラーハンドリング message = searchRange.Columns(2).Find(searchText).Offset(0, 1).Value On Error GoTo 0 ' エラーハンドリングを元に戻す If Len(message) > 0 Then ' ポップアップ表示 MsgBox message, vbInformation, "メッセージ" End If End If Next cell End Sub

  • 32進数の文字に+1カウントした値の取得

    Access(vba)で32進数の値に+1カウントした結果を取得したいと考えています。 引数、戻り値とも32進数の値の独自関数を作りたいです。 例) 11AF00 ⇒ 11AF01 11AF0Z ⇒ 11AF10 11AFZZ ⇒ 11AG00 下記のコードを途中まで考えましたが、繰り上がりとか考えてると???になってしまいました。 どなたかご教授お願いします。 Public Function P36進数カウント(str As String) Const alpha = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" Dim i As Integer Dim keta As Integer keta = Len(str)   ←桁数分LOOPするとか考えたのですが、ギブアップです。   Mid(str, i, 1) = Mid(alpha, InStr(alpha, Mid(str, i, 1)) + 1, 1) End Function

  • InStrRev関数とLeft関数とRight関数の組み合わせについて教えてください。

    ワード2002で作成した技術文書について、 (1)(和文字+英数字)の文字列を任意に指定して、 (2)最初に文字数xを求め、 (3)次にInStrRev関数で英数字の1つ前の和文字について、文字列の初めからの数nを求める、 (4)Left関数で和文字を取り出す、(Msgboxに和文字を表示) (5)Right関数で英数字を取り出す、(Msgboxに英数字を表示) というマクロを作りたいのですが、 下記のマクロで足りないところを教えてください。 宜しくお願いします。 Private Sub YougoFugouBetunuki () Dim myText As String Dim x As Integer Dim Yougo As String Dim Fugou As String myText = Selection.Range.Text x = Selection.Characters.Count Fugou = "0-9A-Za-z’" n = InStrRev(myText, Fugou) Yougo = Left(myText, n) Fugou = Right(myText, x-n) End Sub

プリンターがwifi5gを認識しない
このQ&Aのポイント
  • wifiを4gから5gに変えたら,プリンタが5gのwifiを認識できない
  • お使いのパソコンはWindowsで無線LANで接続されています。関連するソフト・アプリはありません。
  • 電話回線の種類はJ:COMです。
回答を見る

専門家に質問してみよう