What do the hash signs in #if, #else, #end if mean?
The accepted answer is correct that your first code example are compile directives.
It's worth pointing out in case someone else comes across this question that your second code example is a different thing. In this case these are file numbers used to identify text streams. You will see them used in the context of the commands below. They are completely unrelated to compiler directives.
Open "c:\test.txt" For Input As #hdlFile Input #hdlfile Print #hdlfile Write #hdlfile Close #hdlfile
The hash symbols represent a preprocessor command, which are commands that are processed prior to compilation, essentially producing dynamic / conditional code. These types of commands are often used in languages such as C/C++ to manage cross-platform programming techniques. A common usage is to check for a particular environment or platform (ie. VBA, Windows, MacOSX, etc), and then implement platform-specific code.
http://en.wikipedia.org/wiki/Preprocessor
The hash indicates that it's a directive. Used for literally including or excluding code from compilation.
http://msdn.microsoft.com/en-us/library/7ah135z7.aspx
whoops that's for vb.net isn't it. Same concept I think.