|
Thank you Johan for your response. No guess can be wild enough, I know But: I have checked the security options in Excel. And, according to my limited knowledge, this should anyway be oblolete since the AddIn has been strongly typed and signed.
I am more or less afraid that with my above mentioned IMessageFilter experiments (this project had started a new instance of Excel) I might have changed some (registry?) settings ... anything like that, and prevent Excel from receiving messages. It would therefore help me a lot if you - or someone of you other probable readers - would tell me that
a) there's no such setting and it makes sense to recheck the project more detailed
or b) there's an error in my code (would I have deleted a line by accident?)
modified on Thursday, May 6, 2010 3:43 PM
|
|
|
|
|
I used Excels workbook_open event to create an instance of the MyCOMAddIn.Connect class. This seems to work, i.e. Excel doesn't complain! Also a function that I call from VBA gives back proper results.
So the "only" thing that doesn't seem to work is the creation of the button (see 'On_StartupComplete' in the code). So I just didn't realize that it's connecting Still the On_StartupComplete Event gives me trouble...
One more professional look at the code, please
|
|
|
|
|
I have never developed any addins for Office myself, so forgive me if this is a dumb question: The code looks like it is written in vb.net, so why do you use On Error Resume Next instead of the good old Try Catch block? Or if I misunderstood, and this is VBA, why not use On Error GoTo ErrorCatcher and first find out if your code isn't just throwing an error.
I mean, if it does, you'll never know with this code.
My advice is free, and you may get what you paid for.
|
|
|
|
|
Hi again Johan,
first things first: You are right that it's VB (.NET Express 2008). And actually that's what I did last night: Change to Try... Catch and hope for an error message, following the same thought you had. Unfortunately the ex-message that should report any error doesn't come, too The whole event just acts like it wouldn't be fired at all.
|
|
|
|
|
Hi all,
I'm finding it hard to work with file conversion in VB.Net. I already have the filesize in Bytes, but I need to display it as KB in a repeater.
The examples on google are too complex for what I need. Any help is appreciated.
Thanks.
|
|
|
|
|
KB = Bytes/1024, em, what else do you want to know? what exactly are you stuck with.
|
|
|
|
|
that is a dangerous idea; all files with sizes less than 1024B will show as 0KB, giving you the impression they are empty. Much better is rounding up like this:
sizeInKiloBytes=(sizeInBytes+1023)/1024;
which only shows zero when it really is zero.
|
|
|
|
|
I found to format it, but I'm still getting errors.. I will post update this when I work it out.
|
|
|
|
|
I was being overly simplistic to try and find out what exactly the problem is........i would hope that anybody who is working in IT knows the relationships between bits bytes k, m, g, t.....and on and on.
but yes agree with your point, i.e. never show zero unless it is actually zero.
|
|
|
|
|
daveauld wrote: i would hope that anybody who is working in IT knows the relationships between bits bytes k, m, g, t.....and on and on.
Never assume this. I once heard one of our IT help desk reps ask a colleague "What exactly is hexadecimal?".
It's time for a new signature.
|
|
|
|
|
I worked with a woman who was supposedly in IT for at least 10 years, who was previously an Oracle instructor, and asked me how to convert K to MB. Scary.
Scott
|
|
|
|
|
Richard MacCutchan wrote: once heard one of our IT help desk reps ask a colleague "What exactly is hexadecimal?"
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
"Not only do you continue to babble nonsense, you can't even correctly remember the nonsense you babbled just minutes ago." - Rob Graham
|
|
|
|
|
I would like to know if there is function in built that converts filesizes automatically.
For instance if there is a file that is 1234 bytes, it will be represented as 1.23 KB, or if we have a file that is 1234567, it will be represented as 1.23 MB. Or anything along these lines.
|
|
|
|
|
No, there is not.
|
|
|
|
|
|
Thank you all for your input. I have finally written a function to do exactly what I need to be done. Please look at the code below and benefit from it if you wish:
Public Function BytesFormatting(ByVal Bytes As Integer) As String
Dim FormattedFileSize As Double
If Bytes < 1024 Then
''code to format fsize as KB
Dim dblFormatted As Double
dblFormatted = Bytes
FormattedFileSize = Format(dblFormatted, "###,###.00") + "KB"
ElseIf (Bytes > 1024 And Bytes < 1048576) Then
''code to format fsize as KB
Dim dblFormatted As Double
dblFormatted = (Bytes + 1023) / 1024
FormattedFileSize = Format(dblFormatted, "###,###.00") + "KB"
ElseIf Bytes > 1048576 Then
''code to format fsize as MB
Dim dblFormatted As Double
dblFormatted = (Bytes / 1024) / 1024
FormattedFileSize = Format(dblFormatted, "###,###,###.00") + "MB"
End If
Return FormattedFileSize.ToString
End Function
|
|
|
|
|
Hate to be the bearer of bad news but you have a typo in your first if chunk.
Dayekh wrote: If Bytes < 1024 Then
''code to format fsize as KB
Dim dblFormatted As Double
dblFormatted = Bytes
FormattedFileSize = Format(dblFormatted, "###,###.00") + "KB"
Surely you mean bytes here rather than kilobytes, eg.
If Bytes < 1024 Then
Dim dblFormatted As Double
dblFormatted = Bytes
FormattedFileSize = Format(dblFormatted, "###,###.00") + "B"
|
|
|
|
|
Not at all, that was intentional. However I should have been clearer. The reason that code block refers to formatting in KiloBytes is because I would like any file that is less than 1024 to be displayed as KB as well. For example a file that is 643 Bytes big will appear as 0.64KB
Cheers.
|
|
|
|
|
What if file is exactly 1024 or 1048576 bytes?
Not likely but not impossible, I can generate one of either size with ease.
Regards
David R
---------------------------------------------------------------
"Every program eventually becomes rococo, and then rubble." - Alan Perlis
The only valid measurement of code quality: WTFs/minute.
|
|
|
|
|
right.
and doesn't Dim FormattedFileSize As Double deserve some attention too?
|
|
|
|
|
Yup. But I guess he has Option Strict Off either intentionally or by default. That allows it to compile.
But there's even worse when you look at it more closely e.g. a file of 1023 bytes returns 1,023.00KB.
He did say it was working so I suppose he tested it.
Regards
David R
---------------------------------------------------------------
"Every program eventually becomes rococo, and then rubble." - Alan Perlis
The only valid measurement of code quality: WTFs/minute.
|
|
|
|
|
I have finally written a function to do exactly what I need to be done. Please look at the code below and benefit from it if you wish
I think he meant: no need for me to test it, just publish and wait a while.
Not sure it will still do what "needs to be done" when we are through...
|
|
|
|
|
|
You have some IndexOutOfRange problems...
As a little VB exercise, here an alternative, spanning a larger range of values; the result is slightly different, notation is float or integer as appropriate:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim pow As Long = 1
For i = 0 To 63
Dim fraction As Long = pow \ 32
If fraction < 1 Then fraction = 1
test(-pow)
test(pow - fraction)
test(pow)
test(pow + fraction)
If pow >= &H4000000000000000 Then Exit For
pow = 2 * pow
Next
End Sub
Public Sub test(ByVal value As Long)
Dim s As String
s = FormattedFileSize(value)
Console.WriteLine(value.ToString().PadLeft(20) & " = " & value.ToString("X16") & " = " & s & "B")
End Sub
Public Function FormattedFileSize(ByVal sizeInBytes As Long) As String
Dim negative As Boolean = False
Dim result As String
Dim value As Long = sizeInBytes
Dim remainder As Long = 0
Dim suffixIndex As Integer
If value < 0 Then
negative = True
value = -value
End If
For suffixIndex = 0 To 20
If value <= 1023 Then Exit For
remainder = value Mod 1024
value = value \ 1024
Next
If remainder > 0 Then
Dim d As Double = value + remainder / 1024
result = d.ToString("F3")
Else
result = value.ToString()
End If
If suffixIndex > 0 Then result = result & " KMGTPEZY"(suffixIndex)
If negative Then result = "-" & result
Return result
End Function
Homework: find and fix the value(s) that still fail.
|
|
|
|
|
I knew it would error for extremely large sizes and failed on negatives so here's a fix. (Not sure the negatives a right.)
Public Function FormattedFileSize(ByVal sizeInBytes As Long) As String
Dim suffix() As String = New String() {"Oops", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB", "XX"}
Dim units As Double = Math.Abs(sizeInBytes) 'Fudge to deal with negatives. Should it error with neg file size?
Dim index As Integer = 0
Do
units = units / 1024.0
index += 1
Loop While units >= 1024.0
Return Format(units, "###,###,##0.000") + suffix(index)
End Function
I've not done homework for years.
Regards
David R
---------------------------------------------------------------
"Every program eventually becomes rococo, and then rubble." - Alan Perlis
The only valid measurement of code quality: WTFs/minute.
|
|
|
|